// 1. 编写一个 Koa 中间件，实现以下功能：

// - 拦截所有请求，并在控制台中输出请求的 URL 和 HTTP 方法。
// - 如果请求路径是 `/`，则返回一个 `JSON` 格式的问候语。
// - 如果请求路径是 `/users`，则调用一个模拟的数据库函数，返回一个包含用户信息的 JSON 数据。

// 要求:

// 1. 输出的日志格式为 `[INFO] [时间] [方法] [URL]`。
// 2. `/users` 的 JSON 数据包括用户的 `id`, `name`, `email`。
// 3. 模拟数据库查询可以使用 `setTimeout` 模拟异步操作。

// 导入依赖包
import koa from "koa";
import Router from "koa-router";

// 创建 koa 实例
const app = new koa();
// 创建 router 实例
const router = new Router();

// 端口号
const port = 8000;

// 监听端口
app.listen(port);

// 创建日志函数（返回日志信息）
function log(method, url) {
  // 创建时间实例
  const date = new Date();

  // 格式化 当前时间
  const nowTime = `${date.getFullYear()}-${
    date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1
  }-${
    date.getDate() < 10 ? `0${date.getDate()}` : date.getDate()
  } ${date.toLocaleTimeString()}`;

  // 返回 日志信息
  return `[INFO] ${nowTime} ${method} ${url}`;
}

// 使用 setTimeout 异步模拟数据库查询
function selelctDB(ctx) {
  // 返回一个 promise 实例
  return new Promise((resolve) => {
    setTimeout(() => {
      ctx.response.body = [
        {
          id: 1,
          name: "Alice",
          email: "alice@example.com",
        },
      ];
      resolve();
    }, 1000);
  });
}

// 处理 GET 请求（使用中间件）
// 请求路径是 `/`
router.get("/", async (ctx, next) => {
  // 返回 问候语
  ctx.response.body = {
    message: "Hello, Welcome to Koa!",
  };

  // 使用日志函数输出日志
  console.log(log(ctx.method, ctx.url));
});

// 请求路径是 `/users`
router.get("/users", async (ctx, next) => {
  // 返回一个包含用户信息的 JSON 数据
  await selelctDB(ctx);

  // 使用日志函数输出日志
  console.log(log(ctx.method, ctx.url));
});

// 使用中间件 处理 URL
app.use(router.routes());

// 输出当前监听的地址
console.log(`当前监听的地址：http://localhost:${port}`);
